#include <iostream>
#include "Myulits.h"
using namespace std;

constexpr double PI_DIV_180 = M_PI / 180;
/**
 * @brief 计算两点之间的夹角
 *
 * @param x1 第一个点的横坐标
 * @param y1 第一个点的纵坐标
 * @param x2 第二个点的横坐标
 * @param y2 第二个点的纵坐标
 * @return 两点之间的夹角，单位为度数
 */
double calculateAngle(double x1, double y1, double x2, double y2)
{
    // 计算两点构成的直线与水平方向的夹角
    double angle = atan2(y2 - y1, x2 - x1);
    return angle;
}

// 计算两点之间的距离
double calculateDistance(double x1, double y1, double x2, double y2)
{
    return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
}

// 计算曲率
double calculateCurvature(double radius)
{
    return 1 / radius; // 曲率的倒数等于半径
}

// 计算区域峰度
double calculateKurtosis(const vector<double> &sum1, const vector<double> &sum2)
{
    double sum1_all = accumulate(sum1.begin(), sum1.end(), 0.0);
    double sum2_all = accumulate(sum2.begin(), sum2.end(), 0.0);
    double kurtosis = (sum1_all / sum1.size()) / pow((sum2_all / sum1.size()), 2) - 3;
    return kurtosis;
}

/*
雷达数据转换为X，Y坐标
*/
double Axis_x(double angle, double distance)
{
    return distance * cos(angle * PI_DIV_180);
}
double Axis_y(double angle, double distance)
{
    return distance * sin(angle * PI_DIV_180);
}
